//package com.competition.web.admin.service.impl;
//import com.basic.service.impl.BaseServiceImpl;
//import com.competition.web.admin.mapper.RegionMapper;
//import com.competition.web.admin.service.IRegionService;
//import com.competition.web.constant.RedisConstant;
//import com.competition.web.entity.Region;
//import com.page.PageResponseData;
//
//import java.sql.Connection;
//import java.util.ArrayList;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//import java.util.concurrent.TimeUnit;
//
//import javax.annotation.Resource;
//
//import org.apache.ibatis.session.SqlSession;
//import org.springframework.data.redis.core.Cursor;
//import org.springframework.data.redis.core.HashOperations;
//import org.springframework.data.redis.core.ListOperations;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.data.redis.core.ScanOptions;
//import org.springframework.data.redis.core.ValueOperations;
//import org.springframework.stereotype.Service;
//
//@Service
//public class RegionServiceImpl extends BaseServiceImpl<Region> implements IRegionService {
//	
//	private RedisTemplate<String, Object> redisTemplate;
//	
//	
//	@Resource
//	public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
//		this.redisTemplate = redisTemplate;
//	}
//	public RegionServiceImpl(RegionMapper mapper) {
//		super(mapper);
//	}
//	protected Class<Region> getEntityClass() {
//		return Region.class;
//	}
//	@Override
//	protected String sqlByGetPageList(String condition) {
//		// TODO Auto-generated method stub
//		return super.sqlByGetPageList(" and parentid = 0");
//	}
//	
//	@Override
//	public List<Region> getRegionListByProvinceId(int parentId) {
//		
//		return getRegionList(parentId);
//		
//	}
//	
//	
//	@Override
//	public List<Region> getRegionList(int parentId) {
//		
//		String key = RedisConstant.getRegionKey(parentId);
//
//		ValueOperations<String, Object> valueOperations = this.redisTemplate.opsForValue();
//
//		List<Region> configs =  (List<Region>) valueOperations.get(key);
////
//		if (null != configs) {
//			return configs;
//		}
//
//		configs = this.getBaseMapper().getDatasBySingleId(parentId);
//
//		if (0 == configs.size()) {
//			valueOperations.set(key, configs, 3, TimeUnit.SECONDS);
//
//			return configs;
//		}
//
//		valueOperations.set(key, configs, 6, TimeUnit.MINUTES);
//
//		return configs;
//	}
//	
//	public Region getDataById(int id) {
//		
//		String key = RedisConstant.getSingleRegionKey(id);
//
//		ValueOperations<String, Object> valueOperations = this.redisTemplate.opsForValue();
//
//		Region configs =  (Region) valueOperations.get(key);
////
//		if (null != configs) {
//			return configs;
//		}
//
//		configs = this.getBaseMapper().selectByPrimaryKey(id);
//
//		if (null== configs) {
//			valueOperations.set(key, configs, 3, TimeUnit.SECONDS);
//
//			return configs;
//		}
//
//		valueOperations.set(key, configs, 6, TimeUnit.MINUTES);
//
//		return configs;
//		
//	}
//	
//	/**
//	 * 获取城市键值对
//	 * @param provinceIds
//	 * @return
//	 */
//	public Map<Integer, Region> getCitysByIdsToMap(Integer[] provinceIds) {
//		
//		List<Region> regions = this.getCitysByIds(provinceIds);
//		
//		Map<Integer, Region> map = new HashMap<Integer, Region>(regions.size() *4 / 3);
//		
//		
//		for (Region region : regions) {
//			
//			map.put(region.getId(), region);
//		}
//		
//		return map;
//		
//	}
//	
//	/**
//	 * 获取城市列表
//	 * @param provinceIds
//	 */
//	public List<Region> getCitysByIds(Integer[] provinceIds) {
//	
//		HashOperations<String, String, Region> valueOperations =redisTemplate.opsForHash();
//		
//		List<Region> regions;
//		
//		Long size = valueOperations.size(RedisConstant.PROVINCE_IDS);
//		
//		if (size == null ||  0 == size) {
//			
//			regions  = this.getDataByIds(provinceIds);
//			
//			for (Region region : regions) {
//				valueOperations.put(RedisConstant.PROVINCE_IDS, region.getId().toString(), region);
//			}
//			
//			return regions;
//		}
//		
//		Cursor<Map.Entry<String, Region>> cursor = valueOperations.scan(RedisConstant.PROVINCE_IDS, ScanOptions.scanOptions().count(200).build());
//		
//		regions = new ArrayList<Region>();
//		
//		while(cursor.hasNext()) {
//			regions.add(cursor.next().getValue());
//		}
//		
//		return regions;
//	}
//}